package com.xique.park.controller.web;

import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import com.xique.common.core.domain.R;
import com.xique.common.core.utils.SecurityUtils;
import com.xique.common.core.utils.poi.ExcelUtil;
import com.xique.common.core.web.domain.PageResult;
import com.xique.common.log.annotation.Log;
import com.xique.common.log.enums.BusinessType;
import com.xique.common.security.annotation.PreAuthorize;
import com.xique.park.service.service.ExportService;
import com.xique.park.service.service.IParkStatisticsIncomeService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

/**
 * 收入统计报表
 *
 * @author guolingling
 */
@Slf4j
@RestController
@RequiredArgsConstructor
@RequestMapping("/web/statistics")
public class WebParkStatisticsIncomeController {

    private final IParkStatisticsIncomeService parkStatisticsIncomeService;

    @Autowired
    private ExportService exportService;

    /**
     * 初始化收入统计报表
     */
    @PostMapping("/init")
    public R<String> init(Boolean initAll) {
        log.info("[收入统计]-初始化收入统计报表，开始时间：{}", DateUtil.now());
        if (Boolean.TRUE.equals(initAll)) {
            // 初始化全部
            parkStatisticsIncomeService.initParkStatisticsIncome(null);
        } else {
            // 初始化当前项目
            parkStatisticsIncomeService.initParkStatisticsIncome(SecurityUtils.getParkId());
        }
        log.info("[收入统计]-初始化收入统计报表，结束时间：{}", DateUtil.now());
        return R.ok();
    }

    /**
     * 统计昨天的收入
     */
    @PostMapping(value = "/yesterdayStatisticsIncome")
    public R<String> yesterdayStatisticsIncome() {
        log.info("[收入统计]-统计昨天的收入，开始时间：{}", DateUtil.now());
        DateTime yesterday = DateUtil.yesterday();
        String day = DateUtil.format(yesterday, DatePattern.NORM_DATE_PATTERN);
        parkStatisticsIncomeService.statisticsIncomeByDay(day);
        log.info("[收入统计]-统计昨天的收入，结束时间：{}", DateUtil.now());
        return R.ok();
    }

    /**
     * 统计指定日期的收入
     *
     * @param day 指定日期 - yyyy-MM-dd
     */
    @PostMapping(value = "dayStatisticsIncome")
    public R<String> dayStatisticsIncome(String day) {
        log.info("[收入统计]-统计指定日期的收入，day：{}，开始时间：{}", day, DateUtil.now());
        parkStatisticsIncomeService.statisticsIncomeByDay(day);
        log.info("[收入统计]-统计指定日期的收入，结束时间：{}", DateUtil.now());
        return R.ok();
    }

    /**
     * 收入报表统计
     *
     * @param type      查询类型 （1：日，2：月，3：年）
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @param pageNum   当前页数
     * @param pageSize  每页数量
     */
    @PreAuthorize(hasPermi = "project:excels:list")
    @GetMapping("/incomeStatistics")
    public R<PageResult> incomeStatistics(Integer type, String startTime, String endTime, Integer pageNum, Integer pageSize) {
        long parkId = SecurityUtils.getParkId();
        pageNum = pageNum != null ? pageNum : 1;
        pageSize = pageSize != null ? pageSize : 10;
        PageResult result = parkStatisticsIncomeService.getParkStatisticsIncome(parkId, type, startTime, endTime, pageNum, pageSize);
        return R.ok(result);
    }

    @PreAuthorize(hasPermi = "park:records:export")
    @Log(title = "导出收入统计报表", businessType = BusinessType.EXPORT)
    @GetMapping("/export")
    public void export(HttpServletResponse response, Integer type, String startTime, String endTime) throws IOException
    {
        long parkId = SecurityUtils.getParkId();
        exportService.exportIncomeStatistics(response,parkId,type,startTime,endTime);

    }


}
